Rework a previous commit to not crash in addition to fixing leaks
authorKristian Rietveld <kris@gtk.org>
Fri, 1 Jan 2010 19:39:57 +0000 (20:39 +0100)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 4 Apr 2010 00:53:48 +0000 (20:53 -0400)
The target list/entry to pasteboard entry conversions return a NSSet
now instead of NSArray.

gtk/gtkclipboard-quartz.c
gtk/gtkdnd-quartz.c
gtk/gtkquartz.c
gtk/gtkquartz.h

index d0cc562625f4c887dfc77f1c56d636b43165f9af..4b57d774febcc617065e63aa2c1857e379ed7794 100644 (file)
@@ -328,15 +328,13 @@ gtk_clipboard_set_contents (GtkClipboard         *clipboard,
                            gboolean              have_owner)
 {
   GtkClipboardOwner *owner;
-  NSArray *types;
+  NSSet *types;
   NSAutoreleasePool *pool;
 
   pool = [[NSAutoreleasePool alloc] init];
 
   owner = [[GtkClipboardOwner alloc] initWithClipboard:clipboard];
 
-  types = _gtk_quartz_target_entries_to_pasteboard_types (targets, n_targets);
-
   if (!(clipboard->have_owner && have_owner) ||
       clipboard->user_data != user_data)
     {
@@ -351,10 +349,14 @@ gtk_clipboard_set_contents (GtkClipboard         *clipboard,
               clipboard->user_data != user_data)
             {
               (*clear_func) (clipboard, user_data);
+              [pool release];
               return FALSE;
             }
           else
-            return TRUE;
+            {
+              [pool release];
+              return TRUE;
+            }
         }
     }
 
@@ -369,7 +371,9 @@ gtk_clipboard_set_contents (GtkClipboard         *clipboard,
     gtk_target_list_unref (clipboard->target_list);
   clipboard->target_list = gtk_target_list_new (targets, n_targets);
 
-  [clipboard->pasteboard declareTypes:types owner:owner];
+  types = _gtk_quartz_target_entries_to_pasteboard_types (targets, n_targets);
+
+  [clipboard->pasteboard declareTypes:[types allObjects] owner:owner];
   [types release];
   [pool release];
 
index f01a71fd34f7bfcc7f2367e3e51cebe21fdd40db..dfce31ba4ce47274c69563dcb3d0777fc0c72472 100644 (file)
@@ -446,7 +446,7 @@ register_types (GtkWidget *widget, GtkDragDestSite *site)
   if (site->target_list)
     {
       NSWindow *nswindow = get_toplevel_nswindow (widget);
-      NSArray *types;
+      NSSet *types;
       NSAutoreleasePool *pool;
 
       if (!nswindow)
@@ -455,7 +455,7 @@ register_types (GtkWidget *widget, GtkDragDestSite *site)
       pool = [[NSAutoreleasePool alloc] init];
       types = _gtk_quartz_target_list_to_pasteboard_types (site->target_list);
 
-      [nswindow registerForDraggedTypes:[types copy]];
+      [nswindow registerForDraggedTypes:[types allObjects]];
 
       [types release];
       [pool release];
@@ -1072,13 +1072,18 @@ gtk_drag_begin_idle (gpointer arg)
   NSPasteboard *pasteboard;
   GtkDragSourceOwner *owner;
   NSPoint point;
+  NSSet *types;
 
   g_assert (info != NULL);
 
   pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
   owner = [[GtkDragSourceOwner alloc] initWithInfo:info];
 
-  [pasteboard declareTypes:_gtk_quartz_target_list_to_pasteboard_types (info->target_list) owner:owner];
+  types = _gtk_quartz_target_list_to_pasteboard_types (info->target_list);
+
+  [pasteboard declareTypes:[types allObjects] owner:owner];
+
+  [types release];
 
   if ((nswindow = get_toplevel_nswindow (info->source_widget)) == NULL)
      return FALSE;
index 6a94c3fd3bd31bf2ced4975dee99042ba91e6940..dcc8ee0c9a30a9fb2c1510b1e411e5758f132d4b 100644 (file)
@@ -83,11 +83,10 @@ target_to_pasteboard_type (const char *target)
     return [NSString stringWithUTF8String:target];
 }
 
-NSArray *
+NSSet *
 _gtk_quartz_target_list_to_pasteboard_types (GtkTargetList *target_list)
 {
   NSMutableSet *set = [[NSMutableSet alloc] init];
-  NSArray *ret;
   GList *list;
 
   for (list = target_list->list; list; list = list->next)
@@ -98,19 +97,14 @@ _gtk_quartz_target_list_to_pasteboard_types (GtkTargetList *target_list)
       g_free (target);
     }
 
-  ret = [set allObjects];
-
-  [set release];
-
-  return ret;
+  return set;
 }
 
-NSArray *
+NSSet *
 _gtk_quartz_target_entries_to_pasteboard_types (const GtkTargetEntry *targets,
                                                guint                 n_targets)
 {
   NSMutableSet *set = [[NSMutableSet alloc] init];
-  NSArray *ret;
   int i;
 
   for (i = 0; i < n_targets; i++)
@@ -118,11 +112,7 @@ _gtk_quartz_target_entries_to_pasteboard_types (const GtkTargetEntry *targets,
       [set addObject:target_to_pasteboard_type (targets[i].target)];
     }
 
-  ret = [set allObjects];
-
-  [set release];
-
-  return ret;
+  return set;
 }
 
 GdkAtom 
index cb84f275a6bc864253a2136fa9b675f646f3a938..54f4126e1d106a4e21faca937e88f04a2e135836 100644 (file)
@@ -26,8 +26,8 @@
 
 G_BEGIN_DECLS
 
-NSArray *_gtk_quartz_target_list_to_pasteboard_types    (GtkTargetList *target_list);
-NSArray *_gtk_quartz_target_entries_to_pasteboard_types (const GtkTargetEntry *targets,
+NSSet   *_gtk_quartz_target_list_to_pasteboard_types    (GtkTargetList *target_list);
+NSSet   *_gtk_quartz_target_entries_to_pasteboard_types (const GtkTargetEntry *targets,
                                                         guint                 n_targets);
 
 GList   *_gtk_quartz_pasteboard_types_to_atom_list (NSArray  *array);